random

生成随机数、产生单个或系列随机数、随机组合

random库随机数产生原理

1
2
3
4
5
6
7
8
9
10
11
graph LR

seed[随机数种子]
sm(梅森旋转算法 内部状态机)
state[随机数产生器状态]
rs((随机数序列))

seed--seed函数-->sm
state--setstate函数-->sm
sm--getstate函数-->state
sm--random函数-->rs

库函数详解(21个)

  • 基本随机函数(4个):seed(),getstates(),setstate(),random()
  • 扩展随机函数(6个):randint(),getrandbits(),randrange(),choice(),shuffle(),sample()
  • 分布随机函数(11个):uniform(),triangular(),betavariate(),expovariate(),gammavariate(),gauss(),lognormvariate(),normalvariate(),vonmisesvariate(),paretovariate(),weibullvariate()
基本随机函数 描述
seed(a=None, version=2) 初始化给定的随机数种子。a为可哈希对象,缺省为当前时间,a为整数时回用到所有的位。
getstate() 返回随机数生成器内部状态(三元组)
setstate(state) 设置随机数生成器内部状态,该状态从getstate()函数获得
random() 返回一个[0.0,1.0)之间的随机小数
扩展随机函数 描述
randint(a,b) 生成一个[a,b]之间的整数
randrange(m, n[, k]) 生成一个[m, n)之间以k为步长的随机整数
getrandbits(k) 生成一个k比特长的随机整数
choice(seq) 挑选。从序列seq中随机选择一个元素
suffle(seq) 洗牌。将序列seq打乱顺序,原序列被修改
sample(p, k) 抽样。从序列或集合p中随机选择k个元素,原对象不变
分布随机数 描述
uniform(a,b) 采用等概率分布,生成一个[a, b]之间的随机小数
triangular(low, high, mode) 采用三角分布(辛普森分布),生成一个[low, high]之间的随机小数
betavariate(alpha, beta) 采用beta分布,生成一个[0, 1]之间的随机小数
expovariate(lambda) 采用指数分布,生成一个(0,∞)之间的随机整数
gammavariate(alpha, beta) 采用gamma分布,生成一个随机小数
gauss(mu, sigma) 采用高斯分布,生成一个随机小数
lognormvariate(mu, sigma) 采用对数正态分布,生成一个随机小数
normalvariate(mu, sigma) 采用正态分布,生成一个随机小数
vonmisesvariate(mu, kappa) 采用冯米塞斯分布,生成一个随机小数
paretovariate(alpah) 采用帕累托分布,生成一个随机小数
weibullvariate(alpha, beta) 采用韦伯分布,生成一个随机小数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
>>>from random import *
>>>random()
0.7142054643506315
>>>random()
0.9222291496048237
>>>seed(1024)
>>>random()
0.7970515714521261
>>>randint(1, 10)
8
>>>randrange(1, 10, 2)
7
>>>seed(1024)
>>>random()
0.7970515714521261
>>>randint(1, 10)
8
>>>randrange(1, 10, 2)
7
>>>ls= list(range(10))
>>>ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>shuffle(ls)
>>>ls
[6, 0, 7, 9, 2, 4, 3, 1, 8, 5]
>>>sample(ls, 3)
[7, 3, 0]
>>>choice(ls)
3
>>>getrandbits(10)
138
>>>getrandbits(1024)
3280201695238716936239020684624047456...(略)
>>>uniform(10,1000)
168.03388435941432
>>>uniform(10,1000)
395.2623313887394
>>>betavariate(10, 100)
0.06945246213487724
>>>betavariate(10, 100)
0.11142309099887106
>>>lognormvariate(10, 100)
5.364956236648193e+113
1
2
3
4
5
6
7
import random
ls = list(range(100))
random.seed(random.choice(ls))
lt = random.sample(ls, 30)
for i in range(len(lt)):
lt[i] = str(lt[i])
print(",".join(lt))